Problem
【NOIP2017模拟2】银河战舰
Description
瑞奥和玛德利德是非常好的朋友。瑞奥平时的爱好是吹牛,玛德利德的爱好是戳穿瑞奥吹的牛。
这天瑞奥和玛德利德来到了宇宙空间站,瑞奥向玛德利德炫耀这个空间站里所有的银河战舰都是自己的。整个空间站可以看成一个无限大的二维平面,每个战舰都可以看做一个点,在空间站中一共分布着 艘银河战舰。
玛德利德:“你说这些都是你的,那你让他们动一动啊”。
瑞奥:“诶你看,那艘动了!”。
玛德利德:“操作指令由我来发,一共有 种动的方法……”。
瑞奥:“我觉得这样有失公正……”。
Input
第一行一个正整数 ,表示战舰的数量。
接下来 行,每行两个实数,代表第 个战舰的 坐标。
然后一个正整数 ,代表调度的次数。
接下来 行操作,每个操作都是如下类型的一种:
- :把编号在 区间内的战舰 坐标加上 , 坐标加上 。
- :把编号在 区间内的战舰沿 轴翻转。
- :把编号在 区间内的战舰沿 轴翻转。
- :把编号在 区间内的战舰沿直线 翻转。
- :把编号在 区间内的战舰绕原点逆时针旋转 。
Output
输出包括 行,代表着 艘战舰经过 次调度之后的坐标(保留两位小数)。
Sample Input
1 | 3 |
Sample Output
1 | -4.00 4.00 |
Constraint
特殊性质 1:对于所有调度,保证 ,。
特殊性质 2:不存在形如 的操作。
特殊性质 3:不存在形如 的操作。
对于所有测试数据,保证输入的 坐标以及 都最多保留两位小数,,任何时刻任何战舰的横纵坐标绝对值都不会超过 。
Source
标签:线段树
矩阵
Solution
用线段树维护二维平面坐标变换。
对于点,对其维护一个矩阵:
(下面的是留给常数的)
那么对于五种变换,都对应着这个矩阵乘一个转移矩阵。
例如对于变换,其对应的转移矩阵为
若有,则对应
类似地,另外四种变换分别对应四个转移矩阵:
显然区间修改相当于区间乘一个矩阵,可以用线段树维护。
时间复杂度。
Code
1 |
|